package club.xyes.zkh.ecommerce.service;

import club.xyes.zkh.ecommerce.commons.dto.AccessLogExportData;
import club.xyes.zkh.ecommerce.commons.entity.Shop;
import club.xyes.zkh.ecommerce.commons.entity.User;
import club.xyes.zkh.ecommerce.commons.entity.UserAccessShopLog;
import com.github.pagehelper.PageInfo;

import java.util.List;

/**
 * Create by 郭文梁 2019/4/18 0018 14:05
 * UserAccessShopLogService
 * 用户浏览商铺记录相关业务行为定义
 *
 * @author 郭文梁
 * @data 2019/4/18 0018
 */
public interface UserAccessShopLogService extends BaseService<UserAccessShopLog> {
    /**
     * 记录一条访问日志
     *
     * @param user 用户
     * @param shop 商铺
     */
    void log(User user, Shop shop);

    /**
     * 通过用户查找用户访问日志
     *
     * @param user 用户
     * @param page 页码
     * @param rows 每页大小
     * @return Log list
     */
    PageInfo<UserAccessShopLog> findByUser(User user, Integer page, Integer rows);

    /**
     * 通过ShopId查询访问记录 数据结果以时间排序
     *
     * @param shopId ShopId
     * @param order  排序方式
     * @param page   页码
     * @param rows   每页大小
     * @return UserAccessShopLog list
     */
    PageInfo<UserAccessShopLog> findByShopIdOrderByTime(Integer shopId, String order, Integer page, Integer rows);

    /**
     * 通过商铺ID查询访问用户 同时根据条件排序
     *
     * @param shopId   商铺ID
     * @param type     排序类型
     * @param username 搜索用户名
     * @param order    (time, amount, frequency, level)
     * @param page     页码
     * @param rows     每页大小
     * @return log list
     */
    PageInfo<UserAccessShopLog> findByShopIdAndOrder(Integer shopId, String username, String type, String order, int page, int rows);

    /**
     * 通过用户名查找在指定店铺消费过得用户
     *
     * @param shopId   商铺ID
     * @param username 用户名
     * @return log list
     */
    List<UserAccessShopLog> findLikeUsername(Integer shopId, String username);

    /**
     * 通过商铺ID查询用户访问记录
     *
     * @param shopId 商铺ID
     * @return 访问记录
     */
    List<UserAccessShopLog> findByShopId(Integer shopId);

    /**
     * 通过商铺ID查询导出数据
     *
     * @param shopId 商铺ID
     * @return 导出数据
     */
    List<AccessLogExportData> findExportDataByShopId(Integer shopId);
}
